Digital processing systems are used in many products such as computers, audio players, cameras, cell phones, etc. Each of these systems includes several or many subsystems that perform dedicated tasks or functions such as scanning for user input, maintaining a communication link, managing power consumption, controlling indicator lights, handling display of images on a display screen, etc. By designing each subsystem for a specific task, a complex device that performs many functions can be divided into its smaller functions and one or more smaller functions can be implemented as a subsystem, thus simplifying the design process.
If dedicated hardware is provided for the subsystems then less centralized control and resources are needed to achieve the functions of the subsystem. For example, if a keyboard key scanner is implemented in hardware where shift registers are used to poll rows and columns of a keyboard grid then such a task will not take up any of the main processor's cycles, memory or other resources. The key scanning subsystem can simply provide a keycode to a routine executed by the main processor whenever a keypress is detected. Such provision to the routine can be, for example, by an interrupt signal while the main processor is performing other tasks.
Although the approach of using dedicated hardware to implement various subsystem functions can provide advantages, some drawbacks of this approach become more pronounced as devices become smaller. For example, in very small devices such as hand-held or other ultra-portable computer systems the amount of space within the device is extremely limited. Subsystems that use dedicated hardware take up space for their electronic components. An even more serious space issue may be in routing signals among the electronic components such as between subsystem hardware or between a subsystem and a main controller that must communicate with the subsystem.
Yet other considerations such as heat dissipation, power consumption, data bandwidth, inter-subsystem communication, etc., can adversely impact a design that uses dedicated hardware for subsystems, especially when the subsystems are designed for small devices.